package com.example;

/**
 * @Author loubobooo
 * @Description #34. 在排序数组中查找元素的第一个和最后一个位置
 * @Date 2019/12/11 9:10 下午
 */
public class FindFirstAndLastPositionOfElementInSortedArray {

    /**
     * @Author loubobooo
     * @Description 给定一个按照升序排列的整数数组 nums，和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
     * 你的算法时间复杂度必须是O(log n) 级别。
     * 如果数组中不存在目标值，返回[-1, -1]。
     * @Date 2019/12/11 9:21 下午
     **/
    public int[] searchRange(int[] nums, int target) {
        int length = nums.length;
        int left = 0;
        int right = length - 1;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] > target) {
                right = mid - 1;
            } else if (nums[mid] == target) {
                left = mid;
                right = mid;
                while (left >= 0 && nums[left] == target) {
                    left--;// 往左走
                }
                while (right <= length - 1 && nums[right] == target) {
                    right++;//往右走
                }
                return new int[]{++left, --right};
            } else {
                left = mid + 1;
            }
        }
        return new int[]{-1, -1};
    }


    public static void main(String[] args) {
        FindFirstAndLastPositionOfElementInSortedArray f = new FindFirstAndLastPositionOfElementInSortedArray();
        int[] ints = f.searchRange(new int[]{5, 7, 7, 8, 8, 10}, 8);
        for (int a : ints) {
            System.out.println(a);
        }
    }
}
